#include <stdio.h>

//位运算符
int main()
{
    short i = 5;//short是整型，是2个字节的整型，int是4个字节
    //5 十进制
    //00 05 十六进制
    //0000 0000 0000 0101 二进制
    //左移
    //0000 0000 0000 1010 -- 十进制值是10
    short j;
    j=i << 1;//一个变量移动以后自身不会变化
    j=i >> 1;
    //0000 0000 0000 0101 5的二进制
    //右移
    //0000 0000 0000 0010 -- 十进制值是2
    i=-1;
    j=i >> 1;
    printf("j=%d\n", j);
    printf("---------------\n");
    i = 0x8011;
    unsigned short s = 0x8011;
    unsigned short r = 0;
    //8011 十六进制
    //1000 0000 0001 0001 有符号数
    //1100 0000 0000 1000
    //C008
    //1000 0000 0001 0001 无符号数
    //0100 0000 0000 1000
    //4008
    j = i >> 1;//对i右移，对一个有符号数右移
    r = s >> 1;//对s右移，对一个无符号数右移
    printf("j=%d,r=%u\n", j,r);

    i = 5,j = 7;
    printf("i&j=%d\n",i&j);
    //0000 0000 0000 0101 -5
    //0000 0000 0000 0111 -7
    //0000 0000 0000 0101 -5
    printf("i|j=%d\n",i|j);
    //0000 0000 0000 0101 -5
    //0000 0000 0000 0111 -7
    //0000 0000 0000 0111 -7
    printf("i^j=%d\n",i^j);
    //0000 0000 0000 0101 -5
    //0000 0000 0000 0111 -7
    //0000 0000 0000 0010 -2

    printf("~i=%d\n",~i);
    // 0000 0000 0000 0101 -5
    // 1111 1111 1111 1010
    // 1111 1111 1111 1001
    // 1000 0000 0000 0110
    //-6

    return 0;
}